package sport;
import java.util.ArrayList;
import java.sql.*;

public class Disziplin {
  int did;
  String name;
  String bereich;

  /**Erzeugt ein Disziplin-Objekt, indem es die Daten aus der Datenbank
   * ausliest.
   * @param did die ID der Disziplin in der Datenbank.
   * @throws java.sql.SQLException wenn irgendwas schief geht.
   */
  public Disziplin(int did) throws SQLException{
    Statement stmt=DBConnection.stmt;
    ResultSet res=stmt.executeQuery("select * from disziplin where did="+did);
    if(!res.first()) throw new SQLException("Keine Disziplin mit did="+did);
    this.did=did;
    name=res.getString("name");
    bereich=res.getString("bereich");
    res.close();
  }

  /**Erzeugt eine neue Disziplin und legt sie in der Datenbank ab.
   * @param name
   * @param bereich
   * @throws SQLException wenn etwas schief geht.
   */
  public Disziplin(String name, String bereich) throws SQLException{
    Statement stmt=DBConnection.stmt;
    stmt.execute("insert into disziplin(name,bereich) values("+name+","+bereich+")");
    ResultSet res=stmt.executeQuery("select LAST_INSERT_ID");
    res.first();
    did=res.getInt(1);
    this.name=name;
    this.bereich=bereich;
  }

  /**Erzeugt eine neue Disziplin zurück in die Datenbank.
   * @throws java.sql.SQLException wenn etwas schief geht.
   */
  public void update() throws SQLException{
    Statement stmt=DBConnection.stmt;
    stmt.execute("update disziplin set name="+name+",bereich="+bereich
      +" where did="+did);
  }

  /**Entfernt diese Disziplin aus der Disziplintabelle.
   * @throws java.sql.SQLException wenn etwas schief geht.
   */
  public void delete() throws SQLException{
    Statement stmt=DBConnection.stmt;
    stmt.execute("delete from disziplin where did="+did);
  }

  @Override
  public String toString(){
    return did+","+name+","+bereich;
  }

  @Override
  public boolean equals(Object o){
    if(!(o instanceof Disziplin)) return false;
    Disziplin d=(Disziplin)o;
    return d.did==did || (d.name.equals(name) && d.bereich.equals(bereich));
  }

  @Override
  public int hashCode(){
    return did;
  }

  public static int[] dids(){
    return DBConnection.getIntArray("select did from disziplin");
  }

  public static ArrayList<Disziplin> disziplinen(int[] dids){
    ArrayList<Disziplin> ret=new ArrayList<Disziplin>(dids.length);
    try{
      for(int d:dids) ret.add(new Disziplin(d));
    } catch(SQLException ex){System.out.println("Fehler: "+ex);}
    return ret;
  }
}
